July 29, 2021
DFS 연습했던게 소용이 있어서 기쁘다.
다만 if 분기를 더 깔끔하게 하도록 신경써야겠다.
L이 numbers.length에 도달하는지 먼저 체크하고 도달하기 전에는 계산식을 수행한다. rec(L+1, acc-numbers[L])
도달했다면 else로 빠져서 target과 같은지 체크하고 cnt++을 한다.
그리고 굳이 마지막 target값과 같을 때도 +-를 체크하는게 아니라, 한바퀴 더 돌려서 바로 === target
으로 하는게 좋겠다.
let numbers = [1, 1, 1, 1, 1]
let target = 3
function solution(numbers, target) {
let cnt = 0
const rec = (L, acc) => {
if (L === numbers.length - 1) {
if (acc + numbers[L] === target || acc - numbers[L] === target) {
return cnt++
}
return
}
rec(L + 1, acc - numbers[L])
rec(L + 1, acc + numbers[L])
}
rec(0, 0)
return cnt
}
solution(numbers, target)
function solution(numbers, target) {
let cnt = 0
const rec = (L, acc) => {
if (L < numbers.length) {
rec(L + 1, acc - numbers[L])
rec(L + 1, acc + numbers[L])
} else {
if (acc === target) return cnt++
}
}
rec(0, 0)
return cnt
}